package com.hspedu.generic;

import java.util.ArrayList;
import java.util.List;

/**
 * @author LiuJinTao
 * @className GenericDetail
 * @date 2024/06/16 0:30
 * @description TODO
 */
public class GenericDetail {
    public static void main(String[] args) {
        // 只能是引用类型，不能为基本数据类型
        ArrayList<Integer> integers = new ArrayList<>();
//        ArrayList<int> ints = new ArrayList<int>();// 错

        // 在给泛型指定具体类型后，可以传入该类型或者其子类类型
        Pig<A> aPig = new Pig<A>(new A());
        Pig<A> bPig = new Pig<A>(new B());

        // 泛型的使用形式
        ArrayList<Integer> list1 = new ArrayList<Integer>();
        List<Integer> list2 = new ArrayList<Integer>();
        // 在实际开发中我们往往简写
        ArrayList<Integer> list3 = new ArrayList<>();
        List<Integer> list4 = new ArrayList<>();

        // 默认泛型为 Object
        ArrayList list = new ArrayList();

        Tiger tiger = new Tiger();
    }
}

class Tiger<E> {
    E e;

    public Tiger() {
    }

    public Tiger(E e) {
        this.e = e;
    }
}

class A {}

class B extends A {}

class Pig<E> {
    E e;

    public Pig(E e) {
        this.e = e;
    }
}